#include <stdio.h>
#include <stdlib.h>
/*
常量
    #define   define 在C语言中 不分配空间
              不分配空间
              原因是 宏定义所作的常量 在预处理阶段就已经处理掉了
    const     cosnt(常量) 在C语言中 分配内存空间 栈空间
              0x7fff9df88e34 就代表分配了空间

              C++ 17 / C++ 11 之后的标准中 已经将 "const" 直接作为代码处理掉

    代码区 、 静态区 、 堆区 、 栈区

常量的特性
    不能被修改
*/

#define PI 3.1415926

int main(int argc, char const *argv[])
{
    int val_1 = PI;
    int val_2 = PI;
    int val_3 = PI;
    int val_4 = PI;
    int val_5 = PI;

    // 创建动态空间
    //用malloc分配了一个int大小的堆空间
    int *val_1_ptr = (int *)malloc(sizeof(int));

    printf("%p\n" , &val_1);
    printf("%p\n" , &val_2);
    printf("%p\n" , &val_3);
    printf("%p\n" , &val_4);
    printf("%p\n" , &val_5);

    printf("%p\n", val_1_ptr);

    //堆空间的地址通常与栈地址相差较大，位于不同的内存区域

    // 释放空间
    free(val_1_ptr);

    //2 allocs = 标准库隐式分配（1次） + 用户显式分配（1次）
    //2 frees = 标准库隐式释放（1次） + 用户显式释放（1次）
    //即使没有显式调用 malloc，仍会显示 1 alloc, 1 free，这验证了标准库的隐式内存操作
    return 0;
}
